/**
 * 
 */
package org.dgm.nw.common;

import org.apache.log4j.Logger;

/**
 * 菜单类Action基类<br>
 * 菜单类action必须继承此基类，否则不能做为菜单使用（会报错）<br>
 * <br>
 * MenuAction类构造函数定义:(子类可通过重写构造函数来设置当前menuAction类型)<br>
 * handlerClass:当前menuAction绑定的Handler类;不设置则认为与是满足命名规范的Handler;如：demo.DemoAction对应demo.DemoHandler<br>
 * multiMode:此业务是否支持并行模式,一般查询类业务都可认为支持并行模式;并行模式的定义是:执行当前业务时，办理其他业务不会对当前业务造成影响.<br>
 * delayDestroyMode:此业务是否使用延迟销毁模式,如果此项设置了true,表示当页面关闭时handler也不会销毁,会等到session超时后才会自动销毁handler.<br>
 * <br>
 * MenuAction类方法命名约定：<br>
 * intiBusi:业务区域模块初始化展示方法，子类必须实现此方法，做为业务模块的step1；<br>
 * init打头:初始化方法，用此命名的方法，sessionHandler会由底层框架建立；一般来说如果存在其他业务入口，可以使用此方法命名；<br>
 * submit打头:业务提交的方法，用此命名的方法，在提交成功后sessionHandler会由底层框架自动销毁，并登记业务日志；<br>
 * 
 * @author wangwz
 * @date Sep 1, 2010
 * @version RCS: $Id: BaseMenuAction.java 842907 2012-10-17 09:36:15Z zhangjp6 $
 */
public abstract class BaseMenuAction {
	/**
	 * Logger for this class
	 */
	protected  final Logger log = Logger.getLogger(this.getClass());

	private String menuId;
	private Class handlerClass;// 该action对应的handler
	private boolean multiMode = false;// 此action是否支持并行模式
	private boolean delayDestroyMode = false;// 延迟销毁handler模式
	Boolean isTargetSignPhone = false;
	
	/**
	 * 此方法仅允许底层使用，业务方法内禁用
	 * 
	 * @param menuId
	 */
	public void setMenuId(String menuId) {
		this.menuId = menuId;
	}

	public Class getHandlerClass() {
		return handlerClass;
	}

	public boolean isMultiMode() {
		return multiMode;
	}

	public boolean isDelayDestroyMode() {
		return delayDestroyMode;
	}

	// ===============以下允许应用模块调用

	/**
	 * 子类中调用
	 * 
	 * @param handlerClass
	 *            与该action绑定的handler类
	 * @param multiMode
	 *            true:支持并行模式;false:不支持并行模式
	 */
	protected BaseMenuAction(Class handlerClass, boolean multiMode) {
		this.multiMode = multiMode;
		this.handlerClass = handlerClass;
	}

	/**
	 * 子类实例化默认方法
	 */
	public BaseMenuAction() {
		String curActionName = this.getClass().getName();
		String targetHandlerName = curActionName.substring(0, curActionName
				.lastIndexOf("Action"))
				+ "Handler"; 
			try {
				handlerClass = Class.forName(targetHandlerName);
			} catch (ClassNotFoundException e) {
				log.fatal("类[" + targetHandlerName + "]不存在.", e);
			}
	}

	/**
	 * 子类中调用
	 * 
	 * @param handlerClass
	 *            与该action绑定的handler类
	 */
	public BaseMenuAction(Class handlerClass) {
		this.handlerClass = handlerClass;
	}

	/**
	 * 子类中调用
	 * 
	 * @param multiMode
	 *            true:支持并行模式;false:不支持并行模式
	 */
	public BaseMenuAction(boolean multiMode) {
		this();
		this.multiMode = multiMode;
	}

	/**
	 * 子类中调用
	 * 
	 * @param multiMode
	 *            true:支持并行模式;false:不支持并行模式
	 * @param delayDestroyMode
	 *            true:延迟销毁handler;false:关闭窗口时销毁handler
	 */
	public BaseMenuAction(boolean multiMode, boolean delayDestroyMode) {
		this();
		this.multiMode = multiMode;
		this.delayDestroyMode = delayDestroyMode;
	}

//	/**
//	 * 获取当前的menu url路径<br>
//	 * 如果此action不是通过.menu提交的，则会抛异常
//	 * 
//	 * @param request
//	 * @param methodName
//	 * @param params
//	 * @return
//	 * @throws BusiException
//	 */
//	public String createMenuUrl(HttpServletRequest request, String methodName,
//			String params) throws BusiException {
//		return getCurActionUrl() + "/" + methodName + ".menu?_menuId="
//				+ getMenuId(request) + (params != null ? ("&" + params) : "");
//	}
//
//	/**
//	 * 获取当前的menu url路径<br>
//	 * 如果此action不是通过.menu提交的，则会抛异常
//	 * 
//	 * @param request
//	 * @param methodName
//	 * @return
//	 * @throws BusiException
//	 */
//	public String createMenuUrl(HttpServletRequest request, String methodName)
//			throws BusiException {
//		return createMenuUrl(request, methodName, null);
//	}
//
//	/**
//	 * 业务action中获取菜单Id的方法
//	 * 
//	 * @param request
//	 * @return
//	 * @throws BusiException
//	 */
//	public String getMenuId(HttpServletRequest request) throws BusiException {
//		if (this.menuId == null) {
//			throw new BusiException("MenuId为空.请通过合法方式提交请求.", null);
//		} else {
//			// 设置menuId到request中,令统一调用时能获取menuId
//			request.setAttribute("menuId", menuId);
//			return this.menuId;
//		}
//	}
//
//	/**
//	 * 创建handler<br>
//	 * 业务初始化时必须调用<br>
//	 * 底层框架调用，一般而言业务开发人员不需要调用此方法
//	 * 
//	 * @param request
//	 * @return
//	 * @throws HandlerException
//	 * @throws BusiException
//	 */
//	public BaseSessionHandler createHandler(HttpServletRequest request)
//			throws HandlerException, BusiException {
//		return SessionHandlerFactory.createHandler(request, this.handlerClass,
//				getMenuId(request), multiMode);
//	}
//
//	/**
//	 * 获取当前业务handler
//	 * 
//	 * @param request
//	 * @return
//	 * @throws HandlerException
//	 * @throws BusiException
//	 */
//	public BaseSessionHandler getHandler(HttpServletRequest request)
//			throws HandlerException, BusiException {
//		return SessionHandlerFactory.getHandler(request, getMenuId(request),
//				multiMode);
//	}
//	
//	/**
//	 * 获取当前业务handler
//	 * 
//	 * @param request
//	 * @param flag 是否抛出NullHandlerException
//	 * @return
//	 * @throws HandlerException
//	 * @throws BusiException
//	 */
//	public BaseSessionHandler getHandler(HttpServletRequest request, boolean flag) throws HandlerException,
//			BusiException, NullHandlerException {
//		
//		return SessionHandlerFactory.getHandler(request, getMenuId(request), multiMode, flag);
//	}
//
//	/**
//	 * 销毁当前业务handler<br>
//	 * 业务办理完成时必须调用<br>
//	 * 底层框架调用，一般而言业务开发人员不需要调用此方法
//	 * 
//	 * @param request
//	 * @throws HandlerException
//	 */
//	public void destroyHandler(HttpServletRequest request)
//			throws HandlerException {
//		SessionHandlerFactory.destroyHandler(request, menuId, multiMode);
//	}
//
//	/**
//	 * 判断当前action是否存在handler<br>
//	 * 底层框架调用，一般而言业务开发人员不需要调用此方法
//	 * 
//	 * @param request
//	 * @return
//	 * @throws HandlerException
//	 */
//	public boolean hasHandler(HttpServletRequest request)
//			throws HandlerException {
//		return SessionHandlerFactory.hasHandler(request, menuId, multiMode);
//	}
//
//	/**
//	 * 判断当前业务是否能够创建<br>
//	 * 如果session存在其他业务
//	 * 
//	 * @param request
//	 * @return
//	 * @throws HandlerException
//	 */
//	public boolean checkHandler(HttpServletRequest request)
//			throws HandlerException {
//		return SessionHandlerFactory.checkHandler(request, menuId, multiMode);
//	}
//
//	/**
//	 * 业务页面入口
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 * @throws UnifyInvokeException
//	 */
//	public void index(HttpServletRequest request, HttpServletResponse response)
//			throws BusiException, HandlerException, UnifyInvokeException {
//
//		Menu curMenu = SysMenuHelper.getMenu(getMenuId(request));// 当前菜单
//
//		// 设置当前菜单是否可以延迟销毁
//		request.setAttribute(PageVarKeyContainer._DELAY_DESTROY_HANDLER_MODE,
//				this.delayDestroyMode);
//
//		// 设置公共参数
//		PageFrameHelper.setCommonShowConfig(request);
//		PageFrameHelper.setBusiShowConfig(request, curMenu);
//
//		// 设置页面location
//		if ("gotone".equals(request
//				.getAttribute(PageVarKeyContainer._FRAME_TEMPLATE))) {
//			request.getSession().setAttribute(SessionKeyContainer.LOCATION_KEY,
//					LocationDefContainer.GOTONE);
//		} else if ("mzone".equals(request
//				.getAttribute(PageVarKeyContainer._FRAME_TEMPLATE))) {
//			request.getSession().setAttribute(SessionKeyContainer.LOCATION_KEY,
//					LocationDefContainer.MZONE);
//		} else if ("easyown".equals(request
//				.getAttribute(PageVarKeyContainer._FRAME_TEMPLATE))) {
//			request.getSession().setAttribute(SessionKeyContainer.LOCATION_KEY,
//					LocationDefContainer.EASYOWN);
//		} else {
//			request.getSession().setAttribute(SessionKeyContainer.LOCATION_KEY,
//					request.getAttribute(PageVarKeyContainer._FRAME_TEMPLATE));
//		}
//
//		//是否是网厅框架location为[services,gotone,mzone,easyown]
//		String WangTingLocation = "services,gotone,mzone,easyown";
//		boolean isWangTing = WangTingLocation.indexOf((String)request.getAttribute(PageVarKeyContainer._FRAME_TEMPLATE))>=0?true:false;
//		
//		// 根据location设置模板
//		String frameTemplatePage = LocationHelper
//				.getLocationBusiFrame((String) request.getSession()
//						.getAttribute(SessionKeyContainer.LOCATION_KEY));
//		
//		/*如果是新的UEUI，而且没有配置关联参数EmptyFrame=true的菜单，根据菜单类型, 查询类的菜单为busi_frame_qry.jsp,办理类的菜单为busi_frame_ect.jsp*/
//		if(SysConfigHelper.isNewUeui() && !curMenu.isEmptyFrame() && isWangTing){
//			String template = frameTemplatePage;
//			String templateSubStr = template.substring(0,template.indexOf("."));
//			if(curMenu.getMenuType().equals("1")){//1为查询类菜单，就是在整合平台菜单配置那里配置的菜单菜单分类为普通菜单
//				frameTemplatePage = templateSubStr+"_qry.jsp";	
//			}else if(curMenu.getMenuType().equals("2")){//2为办理类菜单，就是在整合平台菜单配置那里配置的菜单菜单分类为程控菜单
//				frameTemplatePage = templateSubStr+"_ect.jsp";		
//			}else{
//				throw new BusiException("系统错误，没有该菜单匹配的模板页！",null);
//			}
//		}
//
//		// 接收参数
//		String paramString = BusiManager.builParameterString(request);
//		request.setAttribute(PageVarKeyContainer._INDEX_PARAM, paramString);
//
//		// 主办理区域权限控制
//		if (curMenu.isNeedLogin() && !SessionHelper.isHasLogined(request)) {// 菜单必须登录且用户未登录
//			request.setAttribute(PageVarKeyContainer._BUSI_URL, "");// 空，展示默认内容
//		} else {// 已登录或不需要登录的情况
//			request.setAttribute(PageVarKeyContainer._BUSI_URL, createMenuUrl(
//					request, "initBusi")
//					+ "&" + paramString);// 业务办理区域初始化URL
//
//			// 带有method做入参的
//			String method = request.getParameter("method");
//			if (method != null && !"".equals(method)) {
//				logger.debug("直接指定method:[" + method + "]");
//				String requestRandCode = request
//						.getParameter(SessionKeyContainer.BACK_CALL_VERIFY_CODE);
//				if (requestRandCode != null
//						&& !"".equals(requestRandCode)
//						&& requestRandCode
//								.equals(request
//										.getSession()
//										.getAttribute(
//												SessionKeyContainer.BACK_CALL_VERIFY_CODE))) {
//					String backUrl = createMenuUrl(request, method, BusiManager
//							.builParameterString(request));
//					logger.debug("回调url:[" + backUrl + "]");
//					request
//							.setAttribute(PageVarKeyContainer._BUSI_URL,
//									backUrl);
//				}
//			}
//
//			LoginData loginData = SessionHelper.getLoginData(request);
//			if (loginData != null && loginData.getLocations() != null && !SysConfigHelper.isWap()) {
//				String curLocation = String.valueOf(request.getSession()
//						.getAttribute(SessionKeyContainer.LOCATION_KEY));
//				if (!loginData.getLocations().contains(curLocation)) {
//					request.setAttribute(PageVarKeyContainer._BUSI_URL,
//							createMenuUrl(request, "locationWarn"));// 业务办理区域初始化警告提示信息
//				}
//			}
//		}
//
//		ActionHelper.includePage(request, response, frameTemplatePage);
//	}
//
//	/**
//	 * location区域警告<br>
//	 * 当用户登陆后的可用location不包含当前location时调用
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void locationWarn(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//		LoginData loginData = SessionHelper.getLoginData(request);
//		request.getSession().setAttribute(SessionKeyContainer.LOCATION_KEY,
//				loginData.getLocation());
//
//		String backUrl = String.valueOf(request
//				.getAttribute(PageVarKeyContainer._backUrl));
//		if (CommonUtil.isEmpty(backUrl)) {
//			StringBuffer errorMsgBuf = new StringBuffer(16);
//			errorMsgBuf.append("您当前使用的品牌无法在此区域办理业务.请移步<a href=\"");
//			errorMsgBuf.append(CommonUtil.getContextPath(request)
//					+ "/public/CommonAction/changeCss.action?cssKey="
//					+ loginData.getLocation());
//			errorMsgBuf.append("\">["
//					+ LocationHelper.translateLocation(loginData.getLocation())
//					+ "]</a>办理.");
//			logger.debug("Location区域警告:" + errorMsgBuf.toString());
//
//			ActionHelper.redirectErrorMsgPage(request, response, errorMsgBuf
//					.toString());
//		} else {
//			Menu curMenu = SysMenuHelper.getMenu(getMenuId(request));// 当前菜单
//			String url = CommonUtil.getContextPath(request) + "/"
//					+ loginData.getLocation() + curMenu.getMenuUrl();
//
//			request.setAttribute("url", url);
//			BusiManager
//					.buildParamMap(request, new String[] {
//							PageVarKeyContainer._zoneId,
//							PageVarKeyContainer._tmpDate });
//			String paramString = BusiManager.builParamStrUnRepeat(request);
//			logger.debug("执行url:[" + url + "],参数串[" + paramString + "]");
//			ActionHelper.includePage(request, response,
//					URLContainer.PAGE_BUSI_POST);
//		}
//	}
//
//	/**
//	 * 同名业务不同品牌菜单跳转<br>
//	 * 网厅登陆后品牌的跳转问题
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 */
//	public void locationJump(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException {
//		LoginData loginData = SessionHelper.getLoginData(request);
//		Menu newMenu = SysMenuHelper.getMenu(getMenuId(request), request);
//		if (newMenu != null) {
//			StringBuffer errorMsgBuf = new StringBuffer(16);
//			errorMsgBuf.append("您当前使用的品牌无法找到该菜单.请移步<a href=\"");
//			errorMsgBuf.append(CommonUtil.getContextPath(request) + "/"
//					+ loginData.getLocation() + newMenu.getMenuUrl());
//			errorMsgBuf.append("\">[" + newMenu.getMenuName() + "]</a>办理.");
//			logger.debug("不同菜单项同名业务跳转:" + errorMsgBuf.toString());
//
//			ActionHelper.redirectErrorMsgPage(request, response, errorMsgBuf
//					.toString());
//		}
//	}
//
//	/**
//	 * 业务区域警告<br>
//	 * 当handler并行冲突时，转到此action
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void busiWarn(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//
//		ActionHelper.redirectConfirmPage(request, response,
//				"您有其他业务未办理完成,若办理当前业务会导致您办理中的业务失效.是否确认办理当前业务?", createMenuUrl(
//						request, "initBusi"));
//
//	}
//
//	/**
//	 * 电子协议展示区域<br>
//	 * 子类有自定义需求可以重写该方法
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void showAgreement(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//
//		request.setAttribute("nextAction", createMenuUrl(request, "initBusi",
//				PageVarKeyContainer._IS_ELEAGREEMENT_OK + "=true"));
//		request.setAttribute("content", KbIndexHelper
//				.getSysParam(KbIndexSysParamContainer.ELE_AGREEMENT));
//		ActionHelper.includePage(request, response,
//				URLContainer.PAGE_ELE_AGREEMENT);
//	}
//
//	/**
//	 * 临时密码权限<br>
//	 * 进入菜单时判断是否需要输入服务密码
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void showInitSignUserPsw(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//
//		request.setAttribute("userInfo", SessionHelper.getUserInfo(request));
//		ActionHelper.includePage(request, response,
//				URLContainer.PAGE_INIT_USER_PWD);
//	}
//
//	/**
//	 * 二次鉴权<br>
//	 * 提交前判断是否需要输入服务密码
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void secondSignUserPwd(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//
//		ActionHelper.includePage(request, response,
//				URLContainer.PAGE_SIGN_USER_PWD);
//
//	}
//
//	/**
//	 * 验证二次鉴权服务密码
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void checkSecondSignUserPsw(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//		BaseSessionHandler handler = getHandler(request);
//		String userpwd = request.getParameter("userpwd");
//		if (handler.checkSignUserPwd(request, userpwd)) {
//			// 验证成功时记录在session中
//			request.getSession().setAttribute(SessionKeyContainer.ISSUCCESSECONDPSW, true);
//			request.setAttribute("retcode", RemoteConstants.SUCCESS);
//			ActionHelper.redirectMsgPage(request, response, "服务密码验证成功.");
//			LoginData loginData=SessionHelper.getLoginData(request);
//			if(loginData!=null){
//				loginData.setLogin_type(3);
//			}
//		} else {
//			request.setAttribute("retcode", RemoteConstants.EEROR_CODE);
//			ActionHelper.redirectErrorMsgPage(request, response, "服务密码验证失败.");
//		}
//
//	}
//
//	/**
//	 * 临时密码权限<br>
//	 * 进入菜单时判断是否需要输入验证码
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void showInitSecondPsw(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//		request.setAttribute("userInfo", SessionHelper.getUserInfo(request));
//		ActionHelper.includePage(request, response,
//				URLContainer.PAGE_INIT_SIGN_CODE);
//	}
//
//	/**
//	 * 二次鉴权<br>
//	 * 提交前判断是否需要输入验证密码
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void secondPsw(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//
//		ActionHelper
//				.includePage(request, response, URLContainer.PAGE_SIGN_CODE);
//
//	}
//
//	/**
//	 * 发送二次验证码
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 * @throws UnifyInvokeException
//	 */
//	public void sendSecondPsw(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException, UnifyInvokeException {
//		BaseSessionHandler handler = getHandler(request);
//		String code = handler.createSignCode();
//
//		// 发送验证码
//		String phone_id = "";
//
//		// 从session中 获取二次鉴权的号码
//		if (SessionHelper.getTargetSignPhone(request) != null) {
//			phone_id = SessionHelper.getTargetSignPhone(request);
//			isTargetSignPhone = true;
//		} else {
//			phone_id = SessionHelper.getUserInfo(request).getPhone_id();
//		}
//		if (SysConfigHelper.isSh()) {
//			CommonHelper.sendSmsNcssh(phone_id, code, request, new Date(),
//					"300714");
//		} else {
//			// 组装验证码
//			String smsCodeTemplate = KbIndexHelper
//					.getSysParam(KbIndexSysParamContainer.SMS_CODE_TEMPLATE);
//			if (smsCodeTemplate == null || smsCodeTemplate.equals("")
//					|| smsCodeTemplate.equals("null")) {
//				smsCodeTemplate = "您的验证码是#{code}.";
//			}
//			Map map = new HashMap();
//			map.put("code", code);
//			smsCodeTemplate = CommonUtil
//					.replaceParamValue(smsCodeTemplate, map);
//			CommonHelper.sendSms(phone_id, smsCodeTemplate, request);
//		}
//
//		logger.debug("业务[" + getMenuId(request) + "]创建的随机验证码:[" + code + "]");
//		ActionHelper.redirectMsgPage(request, response,
//				"验证码已发送至您的手机，请输入后点击验证，进入下一步操作。");
//
//	}
//
//	/**
//	 * 验证二次鉴权
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void checkSecondPsw(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//		BaseSessionHandler handler = getHandler(request);
//		String code = request.getParameter("code");
//		String path = request.getServletPath();
//		if (handler.checkSignCode(request, code)) {
//			// 删除二次鉴权的号码
//			if (isTargetSignPhone) {
//				SessionHelper.removeTargetSignPhone(request);
//			}
//			// 验证成功时记录在session中
//			request.getSession().setAttribute(SessionKeyContainer.ISSUCCESSECONDPSW, true);
//			request.setAttribute("retcode", RemoteConstants.SUCCESS);
//			ActionHelper.redirectMsgPage(request, response, "校验码验证成功.");
//			LoginData loginData=SessionHelper.getLoginData(request);
//			if(loginData!=null){
//				loginData.setLogin_type(3);
//			}
//		} else {
//			
//			request.setAttribute("retcode", RemoteConstants.EEROR_CODE);
//			String expiredDateSMSMsg=(String) request.getAttribute("checkSignCode_expiredDateSMSMsg");
//			if(CommonUtil.isNullOrEmptyStr(expiredDateSMSMsg)){
//				
//				ActionHelper.redirectErrorMsgPage(request, response, "校验码验证失败.");
//			}else{
//				ActionHelper.redirectErrorMsgPage(request, response, expiredDateSMSMsg);
//			}
//		}
//
//	}
//
//	/**
//	 * 临时身份证权限<br>
//	 * 进入菜单时判断是否需要输入身份证
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void showInitIdentity(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//
//		ActionHelper.includePage(request, response,
//				URLContainer.PAGE_INIT_IDENTITY);
//	}
//
//	/**
//	 * 二次鉴权<br>
//	 * 提交前判断是否需要输入身份证
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void secondSignIdentity(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//
//		ActionHelper.includePage(request, response,
//				URLContainer.PAGE_SIGN_IDENTITY);
//
//	}
//
//	/**
//	 * 验证二次身份证鉴权
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void checkSeconIdentity(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//		BaseSessionHandler handler = getHandler(request);
//		String identity = request.getParameter("identity");
//		if (handler.checkSignIdentity(request, identity)) {
//			// 验证成功时记录在session中
//			request.getSession().setAttribute(
//					SessionKeyContainer.ISSUCCESSECONDPSW, true);
//			ActionHelper.redirectMsgPage(request, response, "身份证验证成功.");
//		} else {
//			ActionHelper.redirectErrorMsgPage(request, response, "身份证验证失败.");
//		}
//
//	}
//
//	/**
//	 * 输出excel<br>
//	 * handler继承了IOutputFileHandler时可用
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void showExcel(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//
//		BaseSessionHandler handler = getHandler(request);
//		if (!(handler instanceof IOutputFileHandler)) {// handler没有实现IOutputFileHandler接口
//			throw new BusiException("编程规范约束校验出错:["
//					+ handler.getClass().getSimpleName() + "]没有实现["
//					+ IOutputFileHandler.class.getSimpleName() + "]接口", null);
//		}
//		IOutputFileHandler excelHandler = (IOutputFileHandler) handler;
//
//		ActionHelper
//				.showExcel(request, response,
//						excelHandler.getFileName(request), excelHandler
//								.getFileKeys(request), excelHandler
//								.getFileTitleMap(request), excelHandler
//								.getFileContentList(request), excelHandler
//								.getFileBottom(request), handler
//								.getJsonConfig(request));
//	}
//
//	/**
//	 * 输出txt文本<br>
//	 * handler继承了IOutputFileHandler时可用
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void showTxt(HttpServletRequest request, HttpServletResponse response)
//			throws BusiException, HandlerException {
//
//		BaseSessionHandler handler = getHandler(request);
//		if (!(handler instanceof IOutputFileHandler)) {// handler没有实现IOutputFileHandler接口
//			throw new BusiException("编程规范约束校验出错:["
//					+ handler.getClass().getSimpleName() + "]没有实现["
//					+ IOutputFileHandler.class.getSimpleName() + "]接口", null);
//		}
//		IOutputFileHandler excelHandler = (IOutputFileHandler) handler;
//
//		ActionHelper
//				.showTxt(request, response, excelHandler.getFileName(request),
//						excelHandler.getFileKeys(request), excelHandler
//								.getFileTitleMap(request), excelHandler
//								.getFileContentList(request), excelHandler
//								.getFileBottom(request), handler
//								.getJsonConfig(request));
//	}
//
//	/**
//	 * 输出json<br>
//	 * handler继承了IJsonHandler接口
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void showJson(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//
//		BaseSessionHandler handler = getHandler(request);
//		if (!(handler instanceof IJsonHandler)) {// handler没有实现IJsonHandler接口
//			throw new BusiException("编程规范约束校验出错:["
//					+ handler.getClass().getSimpleName() + "]没有实现["
//					+ IJsonHandler.class.getSimpleName() + "]接口", null);
//		}
//		IJsonHandler jsonHandler = (IJsonHandler) handler;
//
//		ActionHelper.showJson(request, response, jsonHandler
//				.getJsonContent(request), handler.getJsonConfig(request));
//	}
//
//	/**
//	 * 发送短消息<br>
//	 * handler继承了ISmsHandler接口
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void sendSms(HttpServletRequest request, HttpServletResponse response)
//			throws BusiException, HandlerException {
//
//		BaseSessionHandler handler = getHandler(request);
//		if (!(handler instanceof ISmsHandler)) {// handler没有实现ISmsHandler接口
//			throw new BusiException("编程规范约束校验出错:["
//					+ handler.getClass().getSimpleName() + "]没有实现["
//					+ ISmsHandler.class.getSimpleName() + "]接口", null);
//		}
//		ISmsHandler smsHandler = (ISmsHandler) handler;
//
//		JsonResult result = new JsonResult();
//		try {
//			CommonHelper.sendSms(SessionHelper.getUserInfo(request)
//					.getPhone_id(), smsHandler.getSmsMsg(request), request);
//			result.setMsg("短信已下发,请注意查收.");
//		} catch (UnifyInvokeException e) {
//			logger.debug("短信发送不成功.", e);
//			result.setMsg("短信无法正确下发.");
//		}
//		result.setCode(String.valueOf(request
//				.getAttribute(RemoteConstants.BUSIACCESSCODE)));
//		ActionHelper.showJson(request, response, result);
//	}
//
//	/**
//	 * 发送邮件<br>
//	 * handler继承了IEMailHandler接口
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public void sendMail(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//		BaseSessionHandler handler = getHandler(request);
//		if (!(handler instanceof IEMailHandler)) {// handler没有实现IEMailHandler接口
//			throw new BusiException("编程规范约束校验出错:["
//					+ handler.getClass().getSimpleName() + "]没有实现["
//					+ IEMailHandler.class.getSimpleName() + "]接口", null);
//		}
//		IEMailHandler emaliHandler = (IEMailHandler) handler;
//
//		String toAddr = emaliHandler.getMailToAddress(request);
//		String title = emaliHandler.getMailTitle(request);
//		String htmlContent = "<html><head><title>" + title + "</title>"
//				+ request.getParameter("_header") + "</head>";
//		htmlContent += ("<body>" + request.getParameter("_body") + "</body></html>");
//		JsonResult result = new JsonResult();
//
//		if (toAddr != null && !toAddr.equals("")) {
//			MailHelper.sendMail(toAddr, title, htmlContent);
//			result.setCode("0");
//			result.setMsg("邮件发送成功.");
//		} else {
//			result.setCode("-1");
//			result.setMsg("邮件未发送,请先设置email邮箱.");
//		}
//
//		ActionHelper.showJson(request, response, result);
//	}
//
//	/**
//	 * 销毁业务,页面离开时自动调用
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public final void destroyBusi(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException {
//		destroyHandler(request);
//		ActionHelper.showJson(request, response, new JsonResult());
//	}
//
//	/**
//	 * 业务执行的第一步<br>
//	 * 业务办理区域，自定义到业务区域视图
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public abstract void initBusi(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException, UnifyInvokeException;
//
//	/**
//	 * 业务执行的最后一步<br>
//	 * 处理业务提交
//	 * 
//	 * @param request
//	 * @param response
//	 * @throws BusiException
//	 * @throws HandlerException
//	 */
//	public abstract void submitBusi(HttpServletRequest request,
//			HttpServletResponse response) throws BusiException,
//			HandlerException, UnifyInvokeException;

}
